#ifndef AB_H
#define AB_H

#include "Pagina.h"
#include <iostream>
#include <QString>
#include "virtual.h"

template <typename T>
class AB
{
    public:
        AB();

        void Insertar(int clave, T Datos);
        void Eliminar(int clave);

        bool Vacio();

        bool Valido(int clave);
        T Index(int clave);

        QString Inorden();

        Pagina<T>* getRaiz();

    protected:
        void Insertar(int clave, T Datos, Pagina<T> **raiz);
        void Empujar(int clave, T Datos, Pagina<T>* raiz, bool* EA, int* MdnaI, T* MdnaT, Pagina<T>** Xr);
        void BuscarNodo(int clave, T Datos, Pagina<T>* pag, bool* Encontrado, int* pos);
        void Buscar(int clave, T Datos, Pagina<T>* raiz, bool* Encontrado, Pagina<T>* N, int* pos);
        void MeterHoja(int clave, T Datos, Pagina<T>* Xder, Pagina<T> *P, int* k);
        Pagina<T> *DividirNodo(int clave, T Datos, Pagina<T>* Xder, Pagina<T>* P, int* k, int* MdnaI, T* MdnaT);

        static bool Vacio(Pagina<T>* raiz);
        static QString Inorden(Pagina<T>* raiz);

        bool Valido(int clave, Pagina<T>* raiz);
        T Index(int clave, Pagina<T>* raiz);

    private:
        Pagina<T>* Raiz;


};

#endif // AB_H
